//
//  HMStatusDAL.swift
//  Weibo
//
//  Created by teacher on 2017/6/17.
//  Copyright © 2017年 teacher. All rights reserved.
//

import UIKit
//  删除最大时间
let MaxTimeInteveral: Double = -(7 * 24 * 3600)

//  微博数据访问层，用于封装微博数据缓存等操作
class HMStatusDAL: NSObject {
    
    /*
        微博缓存数据的逻辑
        1. 判断本地是否有微博缓存数据
        2. 如果本地有微博缓存是直接使用本地缓存数据
        3. 如果本地没有微博缓存数据直接从网络请求微博数据
        4. 微博数据请求成功后要缓存到本地
        5. 微博数据缓存到本地以后返回从网络请求微博数据
     */
    
    //  检查本地是否有微博缓存数据
    class func checkCacheData(maxId: Int64, sinceId: Int64) -> [[String: Any]] {
        //  SELECT * FROM t_statuses where userid = 5826086647 and id < 4119657730395444 order by id desc limit 20
        
        let userid = HMUserAccountViewModel.sharedViewModel.userAccount?.uid
        //  定义sql
        var sql = "SELECT * FROM t_statuses where userid = \(userid!)\n"
        //  第一次启动app的时候maxid和sinceid 0，0
        if maxId > 0 {
            //  上拉加载的查询
            sql += "and id < \(maxId)\n"
        } else {
            //  下拉刷新的请求
            sql += "and id > \(sinceId)\n"
        }
        
        sql += "order by id desc limit 20\n"
        
        //  执行sql
        let localDicArray = HMSqliteManager.sharedManager.selectDicArray(sql: sql)
        
        var statusDicArray = [[String: Any]]()
        //  遍历字典数组获取微博数据
        for localDic in localDicArray {
            //  获取微博二进制数据
            let statusData = localDic["status"] as! Data
            //  把二进制数据准成字典使用
            let statusDic = try! JSONSerialization.jsonObject(with: statusData, options: []) as! [String: Any]
            //  记录微博数据
            statusDicArray.append(statusDic)
        }
        
    
        return statusDicArray
    }
    
    //  缓存微博数据
    class func cacheData(statusDicArray: [[String: Any]]) {
        //  用户id
        let userId = HMUserAccountViewModel.sharedViewModel.userAccount?.uid
        //  定义sql
        let sql = "insert into t_statuses(id, status, userid) values(?, ?, ?)"
        //  开启事物执行插入sql语句
        HMSqliteManager.sharedManager.inTransaction { (db, rollBack) in
            for dic in statusDicArray {
                //  微博id
                let id = dic["id"] as! Int64
                //  微博字典对应的二进制
                let statusData = try! JSONSerialization.data(withJSONObject: dic, options: [])
                let result = db.executeUpdate(sql, withArgumentsIn: [id, statusData, userId!])
                if result == false {
                    //  如果执行过程中出错了，回滚数据
                    rollBack.pointee = true
                    break
                }
            }
        }
        
    }
    
    //  删除缓存数据
    class func clearCacheData() {
        //  获取7天前时间
        let maxDateTime = Date().addingTimeInterval(MaxTimeInteveral)
        let dt = DateFormatter()
        dt.dateFormat = "yyyy-MM-dd HH:mm:ss"
        //  时间字符串
        let maxDateTimeStr = dt.string(from: maxDateTime)
        //  定义sql
        let sql = "delete from t_statuses where time < ?"
        HMSqliteManager.sharedManager.inDatabase { (db) in
            let result = db.executeUpdate(sql, withArgumentsIn: [maxDateTimeStr])
            if result {
                print("删除缓存数据成功，影响了\(db.changes)")
            } else {
                print("删除数据失败")
            }
        }
    
    
    }
    
    
    
}
